//异常管理

package pkgerrors

import (
	"errors"
	"log"
	"os"
)

type ExceptionManage struct {
	logger       *log.Logger
	verbose      bool
	colorEnabled bool //颜色是否启用
}

func NewExceptionManage() *ExceptionManage {
	return &ExceptionManage{
		logger:       log.New(os.Stderr, "[PKG] ", log.LstdFlags),
		colorEnabled: true, //默认开启
	}
}

// 是否显示详细信息
func (m *ExceptionManage) SetVerbose(v bool) {
	m.verbose = v
}
func (em *ExceptionManage) Handle(err error) error {
	if err == nil {
		return nil
	}

	/**
	 *转换错误类型
	 * 尝试将 err 转换为自定义类型 *PkgError
	 */
	var pkgExc *PkgException
	if !errors.As(err, &pkgExc) {
		//转换失败才会走这里
		pkgExc = WrapError(err, CodeUnknownError, LevelFatal, CategoryUnknown, "意外错误 unexpected error")
	}

	// 显示错误
	em.displayError(pkgExc)

	// 根据级别处理
	switch pkgExc.Level {
	/* case Recoverable:
	return nil // 可恢复错误继续执行 */
	case LevelFatal:
		// 致命错误，终止程序
		return pkgExc // 直接返回错误
	default:
		return pkgExc // 其他错误终止
	}
}
